export {}

/* 
  条件类型
    - 根据不同的条件返回不同的类型
    - 语法：
      T extends U ? X : Y
    - 条件类型在日常常规开发中使用几率并不高
        它主要用来在开发中编写一些类型工具
*/

let a: number

type isString<T> = T extends string ? "YES" : "NO"

let b: isString<number> = "NO"

type NumberArr = string[]

// 获取数组类型的元素类型
// infer 用来表示TS自动推断
type ElementType<T> = T extends Array<infer U> ? U : T

// 希望c的类型和NumberArr的元素类型相同
let c: ElementType<NumberArr>
